﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Data;
using System.Reflection;
using System.Windows.Forms;
using DevExpress.XtraEditors;

namespace QL_Truong_Hoc.KhungDaoTao
{
    public partial class frmKhungDaoTao : DevExpress.XtraEditors.XtraForm
    {
        private const string mcstrRoleCode = "khung_nghe";

        private clsEnum.FORM_MODE memMode;
        private clsEnum.TRINH_DO_DAO_TAO memTrinhDo;

        private int mintNextID = -1;
        private List<int> mlstMonHienTai;

        public frmKhungDaoTao(clsEnum.FORM_MODE emMode, clsEnum.TRINH_DO_DAO_TAO emTrinhDo)
        {
            InitializeComponent();
            this.memMode = emMode;
            this.memTrinhDo = emTrinhDo;

            mlstMonHienTai = new List<int>();
        }
                
        private void frmKhungDaoTao_Load(object sender, EventArgs e)
        {
            if (!clsCommon.fncCheckRole(Program.glstRoles, mcstrRoleCode))
            {
                this.BeginInvoke(new MethodInvoker(this.Close));
                return;
            }

            // TODO: This line of code loads data into the 'qLTHDataSet.mKhungDaoTao' table. You can move, or remove it, as needed.
            this.mKhungDaoTaoTableAdapter.Fill(this.qLTHDataSet.mKhungDaoTao);
            // TODO: This line of code loads data into the 'qLTHDataSet.mMon' table. You can move, or remove it, as needed.
            this.mMonTableAdapter.Fill(this.qLTHDataSet.mMon);
            // TODO: This line of code loads data into the 'qLTHDataSet.mKhungDaoTaoMon' table. You can move, or remove it, as needed.
            this.mKhungDaoTaoMonTableAdapter.Fill(this.qLTHDataSet.mKhungDaoTaoMon);
            // TODO: This line of code loads data into the 'qLTHDataSet.mNghe' table. You can move, or remove it, as needed.
            this.mNgheTableAdapter.Fill(this.qLTHDataSet.mNghe);
            // TODO: This line of code loads data into the 'qLTHDataSet.mKhoaHoc' table. You can move, or remove it, as needed.
            this.mKhoaHocTableAdapter.Fill(this.qLTHDataSet.mKhoaHoc);
            // TODO: This line of code loads data into the 'qLTHDataSet.mKhoa' table. You can move, or remove it, as needed.
            this.mKhoaTableAdapter.Fill(this.qLTHDataSet.mKhoa);
            this.mKhungDaoTao_getallbyHeDaoTaoTableAdapter.Fill(this.qLTHDataSet.mKhungDaoTao_getallbyHeDaoTao, (int)this.memTrinhDo);
            xInit();

            Program.gevnApplication.evnMasterUpdate += new clsEvents.dgaMasterUpdateHandler(xMasterUpdate);
        }

        private void xMasterUpdate()
        {
            try
            {
                if (!clsCommon.fncMsgConfirm("Danh mục dùng chung đã thay đổi. Bạn có muốn cập nhật mới dữ liệu?")) return;

                // TODO: This line of code loads data into the 'qLTHDataSet.mKhungDaoTao' table. You can move, or remove it, as needed.
                this.mKhungDaoTaoTableAdapter.Fill(this.qLTHDataSet.mKhungDaoTao);
                // TODO: This line of code loads data into the 'qLTHDataSet.mMon' table. You can move, or remove it, as needed.
                this.mMonTableAdapter.Fill(this.qLTHDataSet.mMon);
                // TODO: This line of code loads data into the 'qLTHDataSet.mKhungDaoTaoMon' table. You can move, or remove it, as needed.
                this.mKhungDaoTaoMonTableAdapter.Fill(this.qLTHDataSet.mKhungDaoTaoMon);
                // TODO: This line of code loads data into the 'qLTHDataSet.mNghe' table. You can move, or remove it, as needed.
                this.mNgheTableAdapter.Fill(this.qLTHDataSet.mNghe);
                // TODO: This line of code loads data into the 'qLTHDataSet.mKhoaHoc' table. You can move, or remove it, as needed.
                this.mKhoaHocTableAdapter.Fill(this.qLTHDataSet.mKhoaHoc);
                // TODO: This line of code loads data into the 'qLTHDataSet.mKhoa' table. You can move, or remove it, as needed.
                this.mKhoaTableAdapter.Fill(this.qLTHDataSet.mKhoa);

                dgvKhung.RefreshData();
                dgvMon.RefreshData();
            }
            catch (Exception ex) { clsCommon.fncMsgError(MethodBase.GetCurrentMethod().ReflectedType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); }
        }

        private bool xInit()
        {
            bool blnResult = false;
            try
            {
                switch (this.memTrinhDo)
                {
                    case clsEnum.TRINH_DO_DAO_TAO.CAO_DANG: this.Text = "Thiết lập khung đào tạo hệ Cao đẳng"; break;
                    case clsEnum.TRINH_DO_DAO_TAO.TRUNG_CAP: this.Text = "Thiết lập khung đào tạo hệ Trung cấp"; break;
                    case clsEnum.TRINH_DO_DAO_TAO.SO_CAP: this.Text = "Thiết lập khung đào tạo hệ Sơ cấp"; break;
                }

                xSetFormMode(this.memMode);

                return true;
            }
            catch (Exception ex) { clsCommon.fncMsgError(MethodBase.GetCurrentMethod().ReflectedType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); }
            return blnResult;
        }

        private bool xSetFormMode(clsEnum.FORM_MODE emMode)
        {
            bool blnResult = false;
            try
            {
                this.memMode = emMode;

                switch (emMode)
                {
                    case clsEnum.FORM_MODE.VIEW:
                        mniSave.Enabled = false;
                        mniAdd.Enabled = true;
                        mniEdit.Enabled = true;
                        mniDelete.Enabled = true;
                        mniCancel.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;

                        //clear combobox
                        cbKhoa.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
                        cbKhoaHoc.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
                        cbNghe.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
                        cbKhoa.SendKey(new KeyEventArgs(Keys.Control | Keys.Delete));
                        cbKhoaHoc.SendKey(new KeyEventArgs(Keys.Control | Keys.Delete));
                        cbNghe.SendKey(new KeyEventArgs(Keys.Control | Keys.Delete));

                        //xóa grid
                        mKhungDaoTaoMonBindingSource.Filter = string.Format("KDT_ID = {0}", clsConst.gcintNoneValue);

                        //disable để tránh bị sửa
                        cbKhoa.Properties.ReadOnly = true;
                        cbKhoaHoc.Properties.ReadOnly = true;
                        cbNghe.Properties.ReadOnly = true;
                        dgvMon.OptionsBehavior.Editable = false;

                        break;

                    case clsEnum.FORM_MODE.ADD:
                        mniSave.Enabled = true;
                        mniAdd.Enabled = false;
                        mniEdit.Enabled = false;
                        mniDelete.Enabled = false;
                        mniCancel.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;

                        //enable control
                        cbKhoa.Properties.ReadOnly = false;
                        cbKhoaHoc.Properties.ReadOnly = false;
                        cbNghe.Properties.ReadOnly = false;
                        dgvMon.OptionsBehavior.Editable = true;

                        //clear combobox
                        cbKhoa.SendKey(new KeyEventArgs(Keys.Control | Keys.Delete));
                        cbKhoaHoc.SendKey(new KeyEventArgs(Keys.Control | Keys.Delete));
                        cbNghe.SendKey(new KeyEventArgs(Keys.Control | Keys.Delete));

                        //xóa grid
                        mintNextID = DAO.MKhungDaoTaoDAO.SelectNextIndex(Program.gobjDb);
                        mKhungDaoTaoMonBindingSource.Filter = string.Format("KDT_ID = {0}", mintNextID);

                        break;

                    case clsEnum.FORM_MODE.EDIT:
                        mniSave.Enabled = true;
                        mniAdd.Enabled = false;
                        mniEdit.Enabled = false;
                        mniDelete.Enabled = true;
                        mniCancel.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;

                        //enable control
                        cbKhoa.Properties.ReadOnly = false;
                        cbKhoaHoc.Properties.ReadOnly = false;
                        cbNghe.Properties.ReadOnly = false;
                        dgvMon.OptionsBehavior.Editable = true;

                        break;
                }

                return true;
            }
            catch (Exception ex) { clsCommon.fncMsgError(MethodBase.GetCurrentMethod().ReflectedType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); }
            return blnResult;
        }

        private void mniAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            try
            {
                xSetFormMode(clsEnum.FORM_MODE.ADD);
            }
            catch (Exception ex) { clsCommon.fncMsgError(MethodBase.GetCurrentMethod().ReflectedType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); }
        }

        private void mniSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            try
            {
                //check valid trước khi tiếp tục
                if (!validControlBlank.Validate()) return;

                switch (this.memMode)
                {
                    case clsEnum.FORM_MODE.ADD:
                        if (xAddNew())
                        {
                            //this.mKhungDaoTao_getallbyHeDaoTaoTableAdapter.GetData((int)this.memTrinhDo);
                            this.mKhungDaoTao_getallbyHeDaoTaoTableAdapter.Fill(this.qLTHDataSet.mKhungDaoTao_getallbyHeDaoTao, (int)this.memTrinhDo);
                            xSetFormMode(clsEnum.FORM_MODE.VIEW);
                        }
                        break;

                    case clsEnum.FORM_MODE.EDIT:
                        if (xUpdate())
                        {
                            //this.mKhungDaoTao_getallbyHeDaoTaoTableAdapter.GetData((int)this.memTrinhDo);
                            this.mKhungDaoTao_getallbyHeDaoTaoTableAdapter.Fill(this.qLTHDataSet.mKhungDaoTao_getallbyHeDaoTao, (int)this.memTrinhDo);
                            xSetFormMode(clsEnum.FORM_MODE.VIEW);
                        }
                        break;
                }
            }
            catch (Exception ex) { clsCommon.fncMsgError(MethodBase.GetCurrentMethod().ReflectedType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); }
        }

        private void mniCancel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            try
            {
                if (!clsCommon.fncMsgConfirm("Dữ liệu sẽ không được lưu. Bạn có chắc muốn hủy?")) return;

                //mKhungDaoTaoMonTableAdapter.GetData();
                mKhungDaoTaoMonTableAdapter.Fill(this.qLTHDataSet.mKhungDaoTaoMon);

                xSetFormMode(clsEnum.FORM_MODE.VIEW);
            }
            catch (Exception ex) { clsCommon.fncMsgError(MethodBase.GetCurrentMethod().ReflectedType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); }
        }

        private bool xView(int intID)
        {
            bool blnResult = false;
            try
            {
                //lấy dữ liệu
                DTO.MKhungDaoTaoDTO objKDT = DAO.MKhungDaoTaoDAO.Select(Program.gobjDb, intID);

                //fill combobox
                cbKhoa.Properties.ReadOnly = false;
                cbKhoaHoc.Properties.ReadOnly = false;
                cbNghe.Properties.ReadOnly = false;
                cbKhoa.EditValue = objKDT.KH_ID;
                cbKhoaHoc.EditValue = objKDT.KHS_ID;
                cbNghe.EditValue = objKDT.NG_ID;
                cbKhoa.Properties.ReadOnly = true;
                cbKhoaHoc.Properties.ReadOnly = true;
                cbNghe.Properties.ReadOnly = true;

                //fill grid
                mKhungDaoTaoMonBindingSource.Filter = string.Format("KDT_ID = {0}", intID);
            }
            catch (Exception ex)
            {
                clsCommon.fncMsgError(MethodBase.GetCurrentMethod().ReflectedType.Name, MethodBase.GetCurrentMethod().Name, ex.Message);
            }
            return blnResult;
        }

        private bool xAddNew()
        {
            bool blnResult = false;
            try
            {
                bool blnSuccess = true;
                Program.gobjTrans = Program.gobjConn.BeginTransaction();
                Cursor.Current = Cursors.WaitCursor;

                dgvMon.CloseEditor();
                dgvMon.UpdateCurrentRow();
                if (clsCommon.fncMsgConfirm("Dữ liệu sẽ được lưu. Bạn có chắc chắn?"))
                {
                    //thêm mới khung đào tạo
                    DTO.MKhungDaoTaoDTO objKDTEntity = new DTO.MKhungDaoTaoDTO();
                    objKDTEntity.KDT_ID = mintNextID;                   //id khung đào tạo
                    objKDTEntity.TD_ID = (int)this.memTrinhDo;          //trình độ
                    objKDTEntity.KH_ID = (int)cbKhoa.EditValue;         //khoa
                    objKDTEntity.KHS_ID = (int)cbKhoaHoc.EditValue;     //khóa học
                    objKDTEntity.NG_ID = (int)cbNghe.EditValue;         //nghề học

                    //thêm điểm cho từng học sinh vào môn đó.
                    #region Them diem cho hs

                    int intMonID;
                    string strLop = "";
                    List<DTO.MLopDTO> objLop;
                    List<DTO.TLopHocSinhDTO> objHs;
                    DTO.THocSinhMonDTO objHsMon;

                    objLop = DAO.MLopDAO.SelectWhere(Program.gobjDb, string.Format("KDT_ID = {0}", objKDTEntity.KDT_ID));

                    strLop = "-1 ";
                    for (int i = 0; i <= objLop.Count - 1; i++)
                    {
                        strLop += ", " + objLop[i].Lop_ID;
                    }

                    objHs = DAO.TLopHocSinhDAO.SelectWhere(Program.gobjDb, string.Format("Lop_ID in ({0})", strLop));
                    objHsMon = new DTO.THocSinhMonDTO();

                    try
                    {
                        for (int i = 0; i <= dgvMon.RowCount - 1; i++)
                        {
                            intMonID = clsCommon.fncCnvNullToInt(dgvMon.GetRowCellValue(i, colMO_ID));
                            objHsMon.MO_ID = intMonID;

                            for (int j = 0; j <= objHs.Count - 1; j++)
                            {
                                objHsMon.HS_ID = objHs[i].HS_ID;
                                blnSuccess = blnSuccess && DAO.THocSinhMonDAO.Insert(Program.gobjDb, Program.gobjTrans, objHsMon);
                            }
                        }

                    #endregion

                        //insert db khung đào tạo
                        blnSuccess = blnSuccess && DAO.MKhungDaoTaoDAO.Insert(Program.gobjDb, Program.gobjTrans, objKDTEntity);
                    }
                    catch { Program.gobjTrans.Rollback(); }
                    finally
                    {
                        if (blnSuccess) { Program.gobjTrans.Commit(); }
                        else { Program.gobjTrans.Rollback(); }
                    }

                    //insert db khung đào tạo + môn học
                    mKhungDaoTaoMonTableAdapter.Update(this.qLTHDataSet.mKhungDaoTaoMon);

                    return true;
                }
            }
            catch (Exception ex)
            {
                clsCommon.fncMsgError(MethodBase.GetCurrentMethod().ReflectedType.Name, MethodBase.GetCurrentMethod().Name, ex.Message);
                clsCommon.fncMsgError("Lưu dữ liệu không thành công. Hãy kiểm tra dữ liệu và thử lại.");
            }
            finally { Cursor.Current = Cursors.Default; }
            return blnResult;
        }

        private bool xEdit(int intID)
        {
            bool blnResult = false;
            try
            {
                //hiển thị dữ liệu
                xView(intID);

                //set form sang edit mode
                xSetFormMode(clsEnum.FORM_MODE.EDIT);

                //lấy các môn hiện tại
                mlstMonHienTai.Clear();
                for (int i = 0; i <= dgvMon.RowCount - 1; i++)
                {
                    mlstMonHienTai.Add(clsCommon.fncCnvNullToInt(dgvMon.GetRowCellValue(i, colMO_ID)));
                }
            }
            catch (Exception ex)
            {
                clsCommon.fncMsgError(MethodBase.GetCurrentMethod().ReflectedType.Name, MethodBase.GetCurrentMethod().Name, ex.Message);
            }
            return blnResult;
        }

        private bool xUpdate()
        {
            bool blnResult = false;
            try
            {
                bool blnSuccess = true;
                Program.gobjTrans = Program.gobjConn.BeginTransaction();

                Cursor.Current = Cursors.WaitCursor;

                dgvMon.CloseEditor();
                dgvMon.UpdateCurrentRow();
                if (clsCommon.fncMsgConfirm("Dữ liệu sẽ được lưu. Bạn có chắc chắn?"))
                {
                    //thêm mới khung đào tạo
                    DTO.MKhungDaoTaoDTO objKDTEntity = new DTO.MKhungDaoTaoDTO();
                    objKDTEntity.KDT_ID = mintNextID;                   //id khung đào tạo
                    objKDTEntity.TD_ID = (int)this.memTrinhDo;          //trình độ
                    objKDTEntity.KH_ID = (int)cbKhoa.EditValue;         //khoa
                    objKDTEntity.KHS_ID = (int)cbKhoaHoc.EditValue;     //khóa học
                    objKDTEntity.NG_ID = (int)cbNghe.EditValue;         //nghề học

                    #region Cập nhật môn học cho Hs

                    List<int> lstMonMoi = new List<int>();
                    List<int> lstMonThem = new List<int>();
                    string strMonBiXoa = "-1 ";

                    string strLop = "";
                    List<DTO.MLopDTO> objLop;
                    List<DTO.TLopHocSinhDTO> objHs;
                    DTO.THocSinhMonDTO objHsMon;

                    for (int i = 0; i <= dgvMon.RowCount - 1; i++)
                    {
                        lstMonMoi.Add(clsCommon.fncCnvNullToInt(dgvMon.GetRowCellValue(i, colMO_ID)));
                    }

                    //tìm các môn bị xóa                        
                    for (int i = 0; i <= mlstMonHienTai.Count - 1; i++)
                    {
                        if (!lstMonMoi.Contains(mlstMonHienTai[i])) strMonBiXoa += ", " + mlstMonHienTai[i].ToString();
                    }

                    //tìm các môn được thêm mới
                    for (int i = 0; i <= lstMonMoi.Count - 1; i++)
                    {
                        if (!mlstMonHienTai.Contains(lstMonMoi[i])) lstMonThem.Add(lstMonMoi[i]);
                    }

                    //lấy danh sách lớp trong khung đào tạo -> lấy hs trong các lớp
                    objLop = DAO.MLopDAO.SelectWhere(Program.gobjDb, string.Format("KDT_ID = {0}", objKDTEntity.KDT_ID));

                    strLop = "-1 ";
                    for (int i = 0; i <= objLop.Count - 1; i++)
                    {
                        strLop += ", " + objLop[i].Lop_ID;
                    }

                    objHs = DAO.TLopHocSinhDAO.SelectWhere(Program.gobjDb, string.Format("Lop_ID in ({0})", strLop));
                    objHsMon = new DTO.THocSinhMonDTO();

                    try
                    {
                        //cập nhật môn học
                        for (int i = 0; i <= objHs.Count - 1; i++)
                        {
                            //xóa môn học
                            DAO.THocSinhMonDAO.Delete(Program.gobjDb, Program.gobjTrans, string.Format("HS_ID = {0} And MO_ID In ({1})", objHs[i].HS_ID, strMonBiXoa));

                            objHsMon.HS_ID = objHs[i].HS_ID;
                            for (int j = 0; j <= lstMonThem.Count - 1; j++)
                            {
                                objHsMon.MO_ID = lstMonThem[j];
                                blnSuccess = blnSuccess && DAO.THocSinhMonDAO.Insert(Program.gobjDb, Program.gobjTrans, objHsMon);
                            }
                        }

                    #endregion

                        //update db khung đào tạo
                        blnSuccess = blnSuccess && DAO.MKhungDaoTaoDAO.Update(Program.gobjDb, Program.gobjTrans, objKDTEntity);
                    }
                    catch { Program.gobjTrans.Rollback(); }
                    finally
                    {
                        if (blnSuccess) { Program.gobjTrans.Commit(); }
                        else { Program.gobjTrans.Rollback(); }
                    }

                    //insert db khung đào tạo + môn học
                    mKhungDaoTaoMonTableAdapter.Update(this.qLTHDataSet.mKhungDaoTaoMon);

                    return true;
                }
            }
            catch (Exception ex)
            {
                clsCommon.fncMsgError(MethodBase.GetCurrentMethod().ReflectedType.Name, MethodBase.GetCurrentMethod().Name, ex.Message);
                clsCommon.fncMsgError("Lưu dữ liệu không thành công. Hãy kiểm tra dữ liệu và thử lại.");
            }
            finally { Cursor.Current = Cursors.Default; }
            return blnResult;
        }

        private void grdControl_EmbeddedNavigator_ButtonClick(object sender, NavigatorButtonClickEventArgs e)
        {
            try
            {
                if (e.Button.ButtonType == NavigatorButtonType.Append)
                {
                    dgvMon.CloseEditor();
                    dgvMon.AddNewRow();
                    dgvMon.ShowEditor();

                    DataRow dtRow = dgvMon.GetFocusedDataRow();
                    dtRow[colKDT_ID.FieldName] = mintNextID;

                    e.Handled = true;
                }

                if (e.Button.ButtonType == NavigatorButtonType.Remove)
                {
                    string strMon = clsCommon.fncCnvNullToString(dgvMon.GetFocusedRowCellDisplayText(colMO_ID));

                    if (!clsCommon.fncMsgConfirm("Bạn có chắc muốn xóa môn " + strMon + "?"))
                        e.Handled = true;
                    else
                        e.Handled = false;
                }
            }
            catch (Exception ex) { clsCommon.fncMsgError(MethodBase.GetCurrentMethod().ReflectedType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); }
        }

        private void dgvKhung_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            try
            {
                //chỉ kích hoạt ở trạng thái view
                if (this.memMode != clsEnum.FORM_MODE.VIEW) return;

                //chỉ kích hoạt với chuột trái
                if (e.Button != System.Windows.Forms.MouseButtons.Left) return;

                mintNextID = clsCommon.fncCnvNullToInt(dgvKhung.GetFocusedRowCellValue(colKDT_ID1));

                if (mintNextID <= 0)
                { return; }

                xView(mintNextID);
            }
            catch (Exception ex) { clsCommon.fncMsgError(MethodBase.GetCurrentMethod().ReflectedType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); }
        }

        private void mniEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            try
            {
                mintNextID = clsCommon.fncCnvNullToInt(dgvKhung.GetFocusedRowCellValue(colKDT_ID1));

                if (mintNextID <= 0)
                {
                    clsCommon.fncMsgInfo("Hãy chọn một giá trị để sửa.");
                    dgvKhung.Focus();
                    return;
                }

                xEdit(mintNextID);
            }
            catch (Exception ex) { clsCommon.fncMsgError(MethodBase.GetCurrentMethod().ReflectedType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); }
        }

        private void mniDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            try
            {
                //tìm xem có bao nhiêu lớp trong khung đào tạo. nếu có thì không cho xóa.
                int intKdtID;
                List<DTO.MLopDTO> lstLop;
                bool blnHasLop = true;          //cờ xác định xem có lớp hay không
                bool blnSuccess = true;

                intKdtID = clsCommon.fncCnvNullToInt(dgvKhung.GetFocusedRowCellValue(colKDT_ID1));

                if (intKdtID <= 0)
                {
                    clsCommon.fncMsgInfo("Hãy chọn một giá trị để xóa.");
                    dgvKhung.Focus();
                    return;
                }

                //intKdtID = mintNextID;
                lstLop = DAO.MLopDAO.SelectWhere(Program.gobjDb, string.Format("KDT_ID = {0}", intKdtID));

                if (lstLop == null) blnHasLop = false;
                if (lstLop.Count <= 0) blnHasLop = false;

                if (blnHasLop)
                {
                    clsCommon.fncMsgWarning("Đang có lớp học nghề trong khung đào tạo này. \nHãy xóa hết các lớp học nghề trước khi xóa khung đào tạo này.");
                    return;
                }
                else
                {
                    if (!clsCommon.fncMsgConfirm("Bạn có chắc muốn xóa khung đào tạo này?")) return;

                    Program.gobjTrans = Program.gobjConn.BeginTransaction();

                    try
                    {
                        blnSuccess = blnSuccess && DAO.MKhungDaoTaoDAO.Delete(Program.gobjDb, Program.gobjTrans, intKdtID);
                        DAO.MKhungDaoTaoMonDAO.Delete(Program.gobjDb, Program.gobjTrans, string.Format("KDT_ID = {0}", intKdtID));
                    }
                    catch { Program.gobjTrans.Rollback(); }
                    finally
                    {
                        if (blnSuccess) { 
                            Program.gobjTrans.Commit();
                            btnRefresh_ItemClick(null, null);
                            xSetFormMode(clsEnum.FORM_MODE.VIEW);
                        }
                        else { Program.gobjTrans.Rollback(); clsCommon.fncMsgError("Xóa khung đào tạo thất bại. Xin hãy thử lại."); }
                    }
                }

            }
            catch (Exception ex) { clsCommon.fncMsgError(MethodBase.GetCurrentMethod().ReflectedType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); }
        }

        private void btnRefresh_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            try
            {
                // TODO: This line of code loads data into the 'qLTHDataSet.mKhungDaoTao' table. You can move, or remove it, as needed.
                this.mKhungDaoTaoTableAdapter.Fill(this.qLTHDataSet.mKhungDaoTao);
                // TODO: This line of code loads data into the 'qLTHDataSet.mMon' table. You can move, or remove it, as needed.
                this.mMonTableAdapter.Fill(this.qLTHDataSet.mMon);
                // TODO: This line of code loads data into the 'qLTHDataSet.mKhungDaoTaoMon' table. You can move, or remove it, as needed.
                this.mKhungDaoTaoMonTableAdapter.Fill(this.qLTHDataSet.mKhungDaoTaoMon);
                // TODO: This line of code loads data into the 'qLTHDataSet.mNghe' table. You can move, or remove it, as needed.
                this.mNgheTableAdapter.Fill(this.qLTHDataSet.mNghe);
                // TODO: This line of code loads data into the 'qLTHDataSet.mKhoaHoc' table. You can move, or remove it, as needed.
                this.mKhoaHocTableAdapter.Fill(this.qLTHDataSet.mKhoaHoc);
                // TODO: This line of code loads data into the 'qLTHDataSet.mKhoa' table. You can move, or remove it, as needed.
                this.mKhoaTableAdapter.Fill(this.qLTHDataSet.mKhoa);
                this.mKhungDaoTao_getallbyHeDaoTaoTableAdapter.Fill(this.qLTHDataSet.mKhungDaoTao_getallbyHeDaoTao, (int)this.memTrinhDo);
                xInit();
            }
            catch (Exception ex) { clsCommon.fncMsgError(MethodBase.GetCurrentMethod().ReflectedType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); }
        }
    }
}